package com.jiajia.study.nio.chapter01;

import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

public class TestNio8 {

    public static void main(String[] args) {
//        test1();
//        test2();
        test3();
    }

    private static void test3() {
        /**
         * 这种方式创建的 bytebuffer 也是在读模式可以直接读
         */
        ByteBuffer wrap = ByteBuffer.wrap("hello".getBytes(StandardCharsets.UTF_8));
        System.out.println("position : " + wrap.position() + " limit ：" + wrap.limit() + " capacity : " +  wrap.capacity());

        while (wrap.hasRemaining()) {
            System.out.println("data is : " + (char)wrap.get());
        }
        // 切换成写模式
        wrap.clear();

        wrap.put("test".getBytes(StandardCharsets.UTF_8));
        System.out.println("position : " + wrap.position() + " limit ：" + wrap.limit() + " capacity : " +  wrap.capacity());
        wrap.flip();
        while (wrap.hasRemaining()) {
            System.out.println("data is : " + (char)wrap.get());
        }
        wrap.clear();

    }

    private static void test2() {
        // 通过字符集编码，获取 ByteBuffer
        ByteBuffer testNetty = StandardCharsets.UTF_8.encode("test netty");
        // 上面方式创建的 ByteBuffer 已经是在读模式了，再次 flip 将读不到数据
//        testNetty.flip();
        while(testNetty.hasRemaining()) {
            System.out.println((char) testNetty.get());
        }

    }

    private static void test1() {
        ByteBuffer byteBuffer = ByteBuffer.allocate(10);
        byteBuffer.put("测试".getBytes(StandardCharsets.UTF_8));

        /**
         * 乱码： 中文一个字符在 utf-8 下，3 个字节
         */
        byteBuffer.flip();
        while(byteBuffer.hasRemaining()){
            System.out.println((char) byteBuffer.get());
        }
    }
}
